/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Pe.edu.unmsm.SIASS.DAOImpl;

import Pe.edu.unmsm.SIASS.DAO.HorarioGrupoDAO;
import Pe.edu.unmsm.SIASS.Dominio.HorarioGrupo;
import Util.HibernateUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Fabrica
 */
public class HorarioGrupoDAOImpl implements HorarioGrupoDAO, Serializable{

    @Override
    public List<HorarioGrupo> listarHorarioGrupo(String dia, int idProfesor) {
        List<HorarioGrupo> lista = new ArrayList<HorarioGrupo>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        try {
            session.beginTransaction();
            Query query = session.createQuery("select distinct hg from HorarioGrupo hg, Horario h, ModalidadDictado md, Profesor p, Grupo g, "
                    + " CursoPeriodo cp, Curso c where hg.grupo=g and hg.profesor=p and p.idProfesor="+idProfesor+""
                    + " and hg.horario=h and h.dia='"+dia+"' and g.cursoPeriodo=cp and cp.curso=c and hg.modalidadDictado=md ");
            lista = (List<HorarioGrupo>) query.list();
            for (HorarioGrupo horario : lista) {
                Hibernate.initialize(horario.getGrupo());
                Hibernate.initialize(horario.getHorario());
                Hibernate.initialize(horario.getModalidadDictado());
                Hibernate.initialize(horario.getProfesor());
                Hibernate.initialize(horario.getGrupo().getCursoPeriodo());
                Hibernate.initialize(horario.getGrupo().getCursoPeriodo().getCurso());
                Hibernate.initialize(horario.getGrupo().getCursoPeriodo().getPeriodo());
            }
            session.beginTransaction().commit();
            session.close();
        } catch (Exception e) {
            session.beginTransaction().rollback();
            e.printStackTrace();
        }
        return lista;
    }

    @Override
    public HorarioGrupo buscarHorarioGrupo(int idHorarioGrupo) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        
        session.beginTransaction();
        Query query = session.createQuery("select a from HorarioGrupo a where a.idHorGrupo="+idHorarioGrupo);
        return (HorarioGrupo) query.uniqueResult();
    }
    
}
